<?php
/**
 * @method static Account instance()
 */
class Account extends TbAbstract
{
	protected $_table = 'Account';

    static protected $_activeId = null;

    static protected $_instance = null;

	public function activeByCode($code)
	{
		$db = Db::getInstance();
		try{
			$sql = sprintf("SELECT id FROM AccountActivate WHERE activeCode='%s' LIMIT 1", $db->real_escape_string($code));
			$result = $db->query($sql);
			if($result->num_rows == 0){
				throw new Exception('Code invalid');
			}
			$buff = $result->fetch_assoc();
			$id = $buff['id'];
			$sql = sprintf("UPDATE Account SET status='1' WHERE id='%s' LIMIT 1", $id);
			if(!$db->query($sql)){
				throw new Exception($db->error);
			}
			$sql = sprintf("DELETE FROM AccountActivate WHERE id='%s'", $id);
			if(!$db->query($sql)){
				throw new Exception($db->error);
			}
			self::$_activeId = $buff['id'];
			return true;
		}
        catch(Exception $ex){
			throw $ex;
		}
	}

    public function getActiveId()
    {
        return self::$_activeId;
    }
	
	public function activeById($id)
	{
		$db = Db::getInstance();
        $sql = sprintf("UPDATE Account SET status='1' WHERE id='%s' LIMIT 1", $db->real_escape_string($id));
        if(!$db->query($sql)){
            throw new Exception($db->error);
        }
        $sql = sprintf("DELETE FROM AccountActivate WHERE id='%s'", $db->real_escape_string($id));
        if(!$db->query($sql)){
            throw new Exception($db->error);
        }
	}
	
	public function register($email, $password, $phone, $name, $address)
	{
		$pdo = Db::getPDO();
		try {
            $this->add(array(
                'email'=> $email,
                'password'=> md5($password),
                'phone'=> $phone,
                'name'=> $name,
                'address'=> $address
            ));
            $id = $pdo->lastInsertId();
			$rand = rand(1000, 9999);
			$randMd5 = md5($id.$rand);
			$sql = sprintf("INSERT INTO AccountActivate(id,activeCode,activeNum) VALUES('%s','%s','%s')",
					$id,
					$randMd5,
					$rand);
			$pdo->query($sql);
			$string = <<<STRING
<p>สวัสดีคุณ {$email}</p>
			
<p>ยินดีต้อนรับเข้าสู่ <a href="http://p2dc.com">p2dc.com</a> Internet Data Center มาตรฐาน ใจกลางเมืองเชียงใหม่<br />
หวังเป็นอย่างยิ่งว่าท่านจะได้รับความสะดวกและพึงพอใจในการสั่งซื้อบริการกับเรา</p>

<p>หากมีข้อสงสัยประการใดหรือต้องการสอบถามข้อมูลเพิ่มเติม สามารถติดต่อผ่านทางช่องทางดังต่อไปนี้</p>

<p>
facebook fanpage : <a href="http://facebook.com/pla2dc">facebook.com/pla2dc</a><br />
skype ID : pla2dc<br />
อีเมล์ : pla2dc@gmail.com<br />
โทรศัพท์ : 087-787-6960<br />
</p>

<p>เวลาทำการ : จันทร์ – เสาร์ เวลา 10.00 - 17.00 น.</p>

<p>
ขอแสดงความนับถือ<br />
Pla2 Data Center Chiang mai<br />
บริษัท ปลาทูฟิวชั่น จำกัด<br />
</p>

<a href="http://p2dc.com/old.php?page=activeAccountByCode&activeCode={$randMd5}">กรุณาคลิกที่นีเพื่อยืนยัน e-mail(Verrify account)</a>
STRING;
			Notify::mail($email , 'ยืนยันการสมัครสมาชิก', $string);
			return true;
		} catch (Exception $ex) {
			Log::error($ex->getMessage());
			throw $ex;
		}
	}
	
	public function get($param = null, array $options = array())
    {
        $default = array('password'=> false);
        $options = array_merge($default, $options);
		$item = parent::get($param, $options);
        foreach($item as $key => $value){
            unset($item[$key]['password']);
        }
        return $item;
	}

    public function getOne($param = null, array $options = array())
    {
        return parent::getOne($param, $options);
    }
	
	public function getByEmail($email)
	{
		$db = Db::getInstance();
		try{
			$sql = sprintf("SELECT * FROM Account WHERE email='%s'", $db->real_escape_string($email));
			$result = $db->query($sql);
			if(!$result) throw new Exception($db->error);
			return $result->fetch_assoc();
		}
		catch(Exception $ex) {
			Log::error($ex);
			return false;
		}
	}
	
	public function changePassword($id, $newPassword)
	{
		$this->edit($id, array('password'=> md5($newPassword)));
	}
	
	public function duplicateEmail($email)
	{
		$db = Db::getInstance();
		$query = sprintf("SELECT * FROM Account WHERE email='%s'", $db->real_escape_string($email));
		$result = $db->query($query);
		if($result->num_rows != 0){
			return true;
		}
		return false;
	}
}